package com.hqyj.javaSpringBoot.modules.test.repository;

import com.hqyj.javaSpringBoot.modules.test.entity.Student;
import net.sf.jsqlparser.statement.select.First;
import net.sf.jsqlparser.statement.select.Top;
import org.apache.ibatis.annotations.Param;
import org.hibernate.query.NativeQuery;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

/**
 * 继承 JpaRepository<T, ID> 接口（其中 T 是实体 bean， ID 是主键），
 * 添加 @Repository 注解，到此，我们一行代码都不 用写，即可调用父接口实现功能；
 */
@Repository
public interface StudentRepository extends JpaRepository<Student,Integer>,
        JpaSpecificationExecutor<Student> {

    /**
     *  repository  --属性查询
     * 接口方法命名：findBy + Top || First（option） +属性 + 关键字 + 属性 （option）；
     */
        Student findFirstByStudentNameAndAge(String studentName, Integer age);

        @Query(nativeQuery=true,value="select * from test_studnet where id=:id")
//        @Query("from Student where id=:id")
        Student getStudentByIdV2(@Param("id") int id);

        @Modifying
        @Query("update Student set studentName=:studentName where id=:id")
        void updateStudentNameById(@Param("studentName") String studentName, @Param("id") int id);
}
